import { isFunction } from '../common/validator';
import { getCurrentPage, isDef } from '../common/utils';
function onPageScroll(event) {
  const { vanPageScroller = [] } = getCurrentPage();
  vanPageScroller.forEach((scroller) => {
    if (typeof scroller === 'function') {
      // @ts-ignore
      scroller(event);
    }
  });
}
export function pageScrollMixin(scroller) {
  return Behavior({
    attached() {
      const page = getCurrentPage();
      if (!isDef(page)) {
        return;
      }
      const _scroller = scroller.bind(this);
      const { vanPageScroller = [] } = page;
      if (isFunction(page.onPageScroll) && page.onPageScroll !== onPageScroll) {
        vanPageScroller.push(page.onPageScroll.bind(page));
      }
      vanPageScroller.push(_scroller);
      page.vanPageScroller = vanPageScroller;
      page.onPageScroll = onPageScroll;
      this._scroller = _scroller;
    },
    detached() {
      const page = getCurrentPage();
      if (!isDef(page) || !isDef(page.vanPageScroller)) {
        return;
      }
      const { vanPageScroller } = page;
      const index = vanPageScroller.findIndex((v) => v === this._scroller);
      if (index > -1) {
        page.vanPageScroller.splice(index, 1);
      }
      this._scroller = undefined;
    }
  });
}
